library(tidyverse)
library(readxl)
library(countrycode)
library(gganimate)
url1 <- "https://query.data.world/s/tw3oaknxjlqods27xzzbpa3do4rmfr"
p1f <- tempfile()
download.file(url1, p1f, mode = "wb")
happy_data <- read_excel(path = p1f)
colnames(happy_data) <- c("WP5_Country", "country.name", "Year", "Happiness", "GDP", "Soc_Support", "Life_Exp", "Choice_Freedom", "Generosity", "Corrupt_Percept", "Pos_Aff", "Neg_Aff", "Gov_Confident", "Democratic_Qual", "Delivery_Qual", "HappySD", "HappySD_Mean", "Bank_Index", "Bank_Index_Past", "Income", "Trust", "Trust81", "Trust89", "Trust94", "Trust99", "Trust05", "Trust10")
#Create a continent column
happy_data$continent <- NA
#Set the country and continent columns as characters
happy_data$country.name <- as.character(happy_data$country.name)
happy_data$continent <-as.character(happy_data$continent)
#Map country name onto continent
happy_data <- happy_data %>%
mutate(continent = countrycode(sourcevar = country.name, origin = "country.name", destination = "continent")) %>%
select(continent, everything())
## Warning in countrycode(sourcevar = country.name, origin = "country.name", : Some values were not matched unambiguously: Kosovo
str(happy_data)
## Classes 'tbl_df', 'tbl' and 'data.frame': 1420 obs. of 28 variables:
## $ continent : chr "Asia" "Asia" "Asia" "Asia" ...
## $ WP5_Country : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ country.name : chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ...
## $ Year : num 2008 2009 2010 2011 2012 ...
## $ Happiness : num 3.72 4.4 4.76 3.83 3.78 ...
## $ GDP : num 7.2 7.36 7.42 7.45 7.55 ...
## $ Soc_Support : num 0.451 0.552 0.539 0.521 0.521 ...
## $ Life_Exp : num 47.6 47.9 48.2 48.5 48.7 ...
## $ Choice_Freedom : num 0.718 0.679 0.6 0.496 0.531 ...
## $ Generosity : num 0.183 0.205 0.139 0.176 0.248 ...
## $ Corrupt_Percept: num 0.882 0.85 0.707 0.731 0.776 ...
## $ Pos_Aff : num 0.518 0.584 0.618 0.611 0.71 ...
## $ Neg_Aff : num 0.258 0.237 0.275 0.267 0.268 ...
## $ Gov_Confident : num 0.612 0.612 0.299 0.307 0.435 ...
## $ Democratic_Qual: num -1.96 -2.08 -2.02 -1.94 -1.86 ...
## $ Delivery_Qual : num -1.67 -1.65 -1.63 -1.62 -1.44 ...
## $ HappySD : num 1.77 1.72 1.88 1.79 1.8 ...
## $ HappySD_Mean : num 0.477 0.391 0.395 0.466 0.475 ...
## $ Bank_Index : num NA NA NA NA NA NA NA NA NA NA ...
## $ Bank_Index_Past: num NA NA NA NA NA NA NA NA NA 0.305 ...
## $ Income : num NA 0.442 0.327 0.337 0.345 ...
## $ Trust : num NA 0.286 0.276 NA NA ...
## $ Trust81 : num NA NA NA NA NA NA NA NA NA NA ...
## $ Trust89 : num NA NA NA NA NA NA NA NA NA NA ...
## $ Trust94 : num NA NA NA NA NA ...
## $ Trust99 : num NA NA NA NA NA ...
## $ Trust05 : num NA NA NA NA NA NA NA NA NA NA ...
## $ Trust10 : num NA NA NA NA NA NA NA NA NA NA ...
happy_data_cont <- happy_data %>%
filter(!is.na(continent))
#Plot happiness against year, split by continent, colour by country (Scatter)
ggplot(happy_data_cont, aes (x = Year, y = Happiness, colour = continent)) +
geom_point(alpha = .5, show.legend = TRUE) +
facet_wrap(~continent)

#Plot happiness against year, split by continent, colour by country (Line)
ggplot(happy_data_cont, aes (x = Year, y = Happiness, colour = country.name)) +
geom_line() +
facet_wrap(~continent) +
theme(legend.position="none")

ggplot(happy_data_cont, aes (x = country.name, y = Happiness, fill = continent)) +
geom_bar(stat = "identity", width = 2.0) +
facet_wrap(~continent) +
theme(legend.position="none") +
geom_text(aes(label = country.name), angle = 90) +
transition_time(Year)
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
## Warning: position_stack requires non-overlapping x intervals
